/**
 * HashMap 键值对
 * @author zhouzhanglin
 */
HashMap = function()
{
	this._values = [];
	this._size =0  ;
};
//========getter/setter===========================
/**
 * 获取所有的键
 */
HashMap.prototype.getKeys=function(){ 
	var keys=[];
	for(var key in this._values){
		keys.push( key );
	}
	return keys ;
};
/**
 * 获取所有的值
 * @returns {Array}
 */
HashMap.prototype.getValues=function(){ 
	var values = [];
	for(var key in this._values){
		values.push( this._values[key] );
	}
	return values;
};
/**
 * 数组长度，数量
 */
HashMap.prototype.getSize  =function()
{
	return this._size ;
};
/**
 * 获取HashMap的键值数组，可以直接用for in 来遍历
 * @returns {Array}
 */
HashMap.prototype.getHashValue = function()
{
	return this._values;
};
//===========================================

//=========公共方法============================

/**
 * 是否已经包含了这个key
 */
HashMap.prototype.containKey = function( key )
{
	return this._values.hasOwnProperty(key);
};

/**
 * 是否包含了value对象
 * @param value 
 * @returns {Boolean}
 */
HashMap.prototype.containValue = function( value )
{
	for(var key in this._values){
		if(value == this._values[key] ) return true;
	}
	return false ;
};

/**
 * 添加一个键值对
 * @param key 键
 * @param value 值
 */
HashMap.prototype.put= function( key , value )
{
	if(!this._values.hasOwnProperty(key)){
		this._size ++;
	}
	this._values[key] = value;
};
/**
 * 通过键来获取值
 * @param key
 * @returns
 */
HashMap.prototype.get = function( key )
{
	if(this.containKey(key))
		return this._values[key];
	return undefined ;
};

/**
 * 通过key来移除一个对象
 * @param key
 */
HashMap.prototype.remove= function( key )
{
	delete this._values[key];
	this._size -- ;
};

/**
 * 移除一个值，速度相对比remove慢
 * @param value
 */
HashMap.prototype.removeValue = function( value )
{
	for(var key in this._values){
		if( this._values[key] == value ){
			this.remove(key);
			break ;
		}
	}
};

/**
 * 将数据清空
 */
HashMap.prototype.clear = function()
{
	for(var key in this._values){
		this.remove(key);
	}
	this._size = 0;
};

/**
 * 清除和释放内存
 */
HashMap.prototype.dispose = function()
{
	this.clear();
	this._values = null ;
};